package com.example.reactor;

import reactor.core.publisher.Mono;

public class ReactorExample {

    public static void main(String[] args) {
        // Step 1: 获取数据A
        Mono<String> dataA = Mono.just("DataA"); // 假设数据A是一个字符串

        // Step 2: 基于数据A获取数据B
        Mono<String> result = dataA.flatMap(a -> {
            // 获取数据B
            Mono<String> dataB = getDataB(a);

            // Step 3: 使用数据A和数据B生成数据C
            return dataB.flatMap(b -> {
                // 组合A和B生成数据C
                return getDataC(a, b);
            });
        });

        // 订阅并获取最终结果
        result.subscribe(System.out::println);
    }

    // 模拟获取数据B的函数
    public static Mono<String> getDataB(String a) {
        // 假设B依赖于A
        return Mono.just("DataB based on " + a);
    }

    // 模拟使用数据A和B生成数据C的函数
    public static Mono<String> getDataC(String a, String b) {
        return Mono.just("DataC based on " + a + " and " + b);
    }
}

